docker: 使用指定的 nuget server 部署应用程序.

momo314相同方式共享非商业用途署名转载

我们在项目中经常会需要搭建并使用自己的 nuget server, 用来存放一些私有的程序集。

虽然使用私有 nuget server 在 visual studio 中跟 nuget.org 并没有什么区别,但是,如果使用 dotnet restore 来对项目进行包还原,则需要进行一些特殊配置,否则就会出现类似 “无法从 nuget.org 中找到指定 package” 的问题。

一个比较常见到的场景,就是在将应用程序部署到 docker 的时候,由于我们会在 Dockerfile 中 通过 RUN dotnet restore xxx 命令来进行包还原,所以经常会遇到下面的错误:

Step 9/18 : RUN dotnet restore "Demo.WebApi/Demo.WebApi.csproj"
 ---> Running in 368692ab51d2
   Determining projects to restore...
/src/Demo.WebApi/Demo.WebApi.cdproj : error NU1101: Unable to find package xxxxxx. No packages exist with this id in source(s): nuget.org [/src/Demo.WebApi/Demo.WebApi.csproj]

参照上述错误信息,我们很容易发现:dotnet restore 命令试图从 nuget.org 下载我们项目中所以来的私有包,拿找不到的话就很正常了。

所以到底怎么办呢?

1. 在项目中添加 nuget.config 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
    <!-- PrivateNuGet: your private nuget server -->
    <add key="PrivateNuGet" value="https://nuget.demo.com/v3/index.json" />
  </packageSources>
</configuration>

2. 修改 Dockerfile

找到 RUN dotnet restore 命令,在其执行之前,将 nuget.config 复制到指定位置,并为 dotnet restore 命令添加参数 configfile, 用于指定 nuget package source。

COPY ["Demo.Api/nuget.config", "Demo.Api/"]
RUN dotnet restore "Demo.Api/Demo.Api.csproj" --configfile "Demo.Api/nuget.config"
✎﹏ 本文来自于 momo314和他们家的猫,文章原创,转载请注明作者并保留原文链接。